Void trong các ngôn ngữ lập trình C và C++ Void_(kiểu_dữ_liệu)

Một hàm có kiểu kết quả void kết thúc hoạt động bằng cách hoặc chạm tới điểm kết thúc của hàm hoặc thực hiện một lệnh trả về mà không có giá trị trả về. Kiểu void có thể cũng xuất hiện như là đối số (argument) duy nhất của một nguyên mẫu hàm (function prototype) nhằm xác định là hàm không có tham số nào cả. Chú ý rằng, mặc dù có tên, nhưng trong tất cả những trường hợp này, kiểu void được dùng làm kiểu unit, chứ không làm số 0 (zero) hay kiểu đáy, thậm chí không giống như một kiểu unit thực sự là kiểu đơn nhất, kiểu void bao gồm một tập hợp rỗng các giá trị, và ngôn ngữ không cung cấp bất cứ cách nào để khai báo một đối tượng hoặc biểu diễn một giá trị với kiểu void.

Trong những phiên bản sớm nhất của C, các hàm không có kết quả xác định đã được mặc định kiểu trả về của int và các hàm không có đối số đã dễ dàng có các danh sách đối số rỗng. Các con trỏ chỉ dữ liệu không được định kiểu đã được khai báo như là các số nguyên (integer) hoặc con trỏ chỉ char. Một vài trình biên dịch C lúc ban đầu đã có đặc điểm mà ngày nay bị xem là phiền toái, đó là phát sinh cảnh báo cho bất kì lời gọi hàm nào không sử dụng giá trị trả về của hàm. Mã cũ đôi khi vứt bỏ những lời gọi hàm như vậy để tránh kết liễu cảnh báo này. Lúc Bjarne Stroustrup bắt đầu công trình của ông ấy trên C++ vào 1979-1980, void và con trỏ void đã từng là một phần của phương ngữ ngôn ngữ C được hỗ trợ bởi các trình biên dịch bắt nguồn từ AT&T.[2]

Việc sử dụng tường minh void và việc không cho các đối số ở trong một nguyên mẫu hàm có các ngữ nghĩa khác nhau trong C và C++, và được chi tiết hóa trong bảng sau đây:[3]

C++C tương đương
void f(); //được ưa thích hơn cảvoid f(void);
void f(void);void f(void);
void f(...); //Chấp nhận bất kì đối số nàovoid f(); /*Chấp nhận bất kì đối số nào*/

Tuy nhiên, một nguyên mẫu C không lấy các đối số, ví dụ void f() ở trên, đã bị phản đối trong C99.[4]